#include "logica.h"

void Inicializa()
{
  arq = fopen("dados.txt", "r+");

  /* se o arquivo nao existe */
  if(arq == NULL)
    {
      idAtual = 0;
      arq = fopen("dados.txt", "w+");
      if(arq == NULL){
	printf("Nao foi possivel abrir o arquivo com os dados dos filmes.\n");
	exit(1);
      }
      fwrite(&idAtual, 1, sizeof(int), arq);
    }
  else
    {
      fseek(arq, 0, SEEK_SET);
      fread(&idAtual, 1, sizeof(int), arq);
    }	
  return;
}

void Inserir()
{
	tFilme filme;

	/* Pegando dados do filme */
	filme.id = idAtual++;

	printf("Digite o titulo do filme: ");
	fgets(filme.titulo, TAM_MAX_TITULO, stdin);
	filme.titulo[strlen(filme.titulo)-1] = '\0';

	filme.numClientes = 0;
	filme.nota = 0;

	printf("Digite o horario do filme: ");
	fgets(filme.horario, TAM_MAX_HORARIO, stdin);
	filme.horario[strlen(filme.horario)-1] = '\0';

	printf("Digite a sala do filme: ");
	scanf("%d", &filme.sala);

	getchar();

	printf("Digite a sinopse do filme: ");
	fgets(filme.sinopse, TAM_MAX_SINOPSE, stdin);
	filme.sinopse[strlen(filme.sinopse)-1] = '\0';

	/* Atualiza o numero de filmes  */
	fseek(arq, 0, SEEK_SET);
	fwrite(&idAtual, 1, sizeof(int), arq);
	
	/* Escrevendo no arquivo */
	fseek(arq, 0, SEEK_END);
	fwrite(&filme, 1, sizeof(tFilme), arq);
	
	return;
}

tFilme Busca()
{
	int id;
	tFilme filme;
	
	printf("Digite o identificador do filme: ");	
	scanf("%d", &id);
	
	while(id > idAtual && id < 0)
	{
		printf("id invalido, digite um id positivo e menor que %d: ", idAtual+1);	
		scanf("%d", &id);
	}
	
	fseek(arq, sizeof(int) + id*sizeof(tFilme), SEEK_SET); 
	fread(&filme, 1, sizeof(tFilme), arq);
	
	return filme;
}

void Listar()
{
	int id;
	tFilme filme;
	
	fseek(arq, 0, SEEK_SET);
	fread(&id, 1, sizeof(int), arq);
	printf("Numero de filmes: %d\n\n", id);
	
	/* pecorre cada filme imprimindo suas informacoes*/
	while(id-- > 0)
	{
		fread(&filme, 1, sizeof(tFilme), arq);
		printf("-------------------------------------------\n");
		Imprimir(filme);		
	}
	
	return;
}

void Imprimir(tFilme filme)
{
	printf("ID: %d\n", filme.id);
	printf("Titulo: ");
	puts(filme.titulo);
	printf("Nota: %d\n", filme.nota);
	printf("N. de clientes: %d\n", filme.numClientes);
	printf("Horario: ");
	puts(filme.horario);
	printf("Sala: %d\n", filme.sala);
	printf("Sinopse: ");
	puts(filme.sinopse);

	return;
}

void AtribuirNota()
{
	int id, nota;
	tFilme filme;
	
	printf("Digite o identificador do filme: ");
	scanf("%d", &id);
	
	while(id > idAtual && id < 0)
	{
		printf("id invalido, digite um id positivo e menor que %d: ", idAtual+1);	
		scanf("%d", &id);
	}
	
	printf("Digite a nota do filme[0-100]: ");
	scanf("%d", &nota);
	
	while(nota > 100 && nota < 0)
	{
		printf("Nota invalida, digite uma nota entre 0 e 100: ");	
		scanf("%d", &nota);
	}
	
	/* Busca o filme */
	fseek(arq, sizeof(int) + id*sizeof(tFilme), SEEK_SET); 
	fread(&filme, 1, sizeof(tFilme), arq);
	
	/* Atualiza a nota e o numero de clientes que deram a nota */
	filme.nota = ((filme.nota * filme.numClientes) + nota)/++filme.numClientes; 
	
	fseek(arq, -1*sizeof(tFilme), SEEK_CUR);
	fwrite(&filme, 1, sizeof(tFilme), arq);
	
	return;
}

void Libera()
{
	fclose(arq);
}

tFilme carregar_informacoes_filme(int idfilme)
{
  tFilme filme;
  fseek(arq, sizeof(int) + idfilme*sizeof(tFilme), SEEK_SET); 
  fread(&filme, 1, sizeof(tFilme), arq);
  return filme;
}

void salvar_informacoes_filme(tFilme *filme){
	/* Busca o filme */
	fseek(arq, sizeof(int) + filme->id*sizeof(tFilme), SEEK_SET); 
	fwrite(filme, 1, sizeof(tFilme), arq);
}
